/**
 * 是否是外部地址
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal (path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/* 合法用户名 */
export function isvalidUsername (str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

/* 合法uri */
export function validateURL (textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母 */
export function validateLowerCase (str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母 */
export function validateUpperCase (str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母 */
export function validateAlphabets (str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * validate email
 * @param email
 * @returns {boolean}
 */
export function validateEmail (email) {
  const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(email)
}

/**
 * 手机验证
 */
export const validateMobile = (rule, value, callback) => {
  const reg = /^1[356789][0-9]{9}$/
  if (!reg.test(value) && value !== '') {
    callback(new Error('请输入正确的手机号'))
  } else {
    callback()
  }
}

/**
 * 联系方式
 */
export const validateContact = (rule, value = '', callback) => {
  if (value !== '' && (value.length < 3 || value.length > 13)) {
    callback(new Error('请输入正确的格式，最少3位，最大13位'))
  } else {
    callback()
  }
}

/**
 * 生成数字范围验证 仅适用于 elementUI 的验证
 *  @param  {Number}  min 数字的最小值
 *  @param  {Number}  max 数字的最大值
 */
export const generateValidateBetween = (min = 0, max = 100) => {
  return (rule, value, callback) => {
    if (value !== '' && typeof value === 'number') {
      if (value > max) {
        callback(new Error(`输入的数字不能大于${max}`))
      } else if (value < min) {
        callback(new Error(`输入的数字不能小于${min}`))
      } else {
        callback()
      }
    } else {
      callback()
    }
  }
}
